Skip to content
Loafacto 문서/참고 문서/web-ui 문서/07. supabase-changelog-table.sql

07. supabase-changelog-table.sql

원본 파일: 'C:\Repository\loafacto-hub\docs\web-ui\07. supabase-changelog-table.sql'

sql
-- =============================================================================
-- 변경 내역(changelog) 테이블 — 관리자 버전 등록/수정/삭제, 모든 사용자 조회
-- user_roles 적용 후 Supabase SQL Editor에서 실행하세요.
-- =============================================================================

CREATE TABLE IF NOT EXISTS public.changelog (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  version text NOT NULL,
  released_date text NOT NULL DEFAULT '',
  new_features_text text NOT NULL DEFAULT '',
  improvements_text text NOT NULL DEFAULT '',
  bug_fixes_text text NOT NULL DEFAULT '',
  created_at timestamptz NOT NULL DEFAULT now(),
  updated_at timestamptz
);

COMMENT ON TABLE public.changelog IS '버전별 변경 내역. 관리자(super_admin/operator)만 등록/수정/삭제, 모든 사용자 조회 가능.';

-- RLS 활성화
ALTER TABLE public.changelog ENABLE ROW LEVEL SECURITY;

-- SELECT: 누구나 읽기 (비로그인 사용자도 변경 내역 페이지 조회)
CREATE POLICY "Changelog is readable by everyone"
ON public.changelog FOR SELECT
TO public
USING (true);

-- INSERT: super_admin, operator 만 등록
CREATE POLICY "Only admins can insert changelog"
ON public.changelog FOR INSERT
TO authenticated
WITH CHECK (
  EXISTS (
    SELECT 1 FROM public.user_roles r
    WHERE r.user_id = auth.uid() AND r.role IN ('super_admin', 'operator')
  )
);

-- UPDATE: super_admin, operator 만 수정
CREATE POLICY "Only admins can update changelog"
ON public.changelog FOR UPDATE
TO authenticated
USING (
  EXISTS (
    SELECT 1 FROM public.user_roles r
    WHERE r.user_id = auth.uid() AND r.role IN ('super_admin', 'operator')
  )
)
WITH CHECK (
  EXISTS (
    SELECT 1 FROM public.user_roles r
    WHERE r.user_id = auth.uid() AND r.role IN ('super_admin', 'operator')
  )
);

-- DELETE: super_admin, operator 만 삭제
CREATE POLICY "Only admins can delete changelog"
ON public.changelog FOR DELETE
TO authenticated
USING (
  EXISTS (
    SELECT 1 FROM public.user_roles r
    WHERE r.user_id = auth.uid() AND r.role IN ('super_admin', 'operator')
  )
);

-- 인덱스: 목록 정렬용
CREATE INDEX IF NOT EXISTS changelog_created_at_desc ON public.changelog (created_at DESC);

GRANT SELECT ON public.changelog TO anon;
GRANT SELECT ON public.changelog TO authenticated;
GRANT INSERT, UPDATE, DELETE ON public.changelog TO authenticated;